package com.shrct.businessprocess.customerservice;

import com.shrct.businessprocess.customerservice.IHasServiceRelatedProducts;
import com.shrct.businessprocess.customerservice.RCRoutineServiceItem;
import com.shrct.businessprocess.customerservice.RCServiceContractDelegate;
import com.shrct.businessprocess.customerservice.impl.RCRoutineServiceImpl;
import com.shrct.businessprocess.customerservice.proxy.RCRoutineServiceProxy;
import com.shrct.businessprocess.product.RCLogicProduct;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCRoutineServiceImpl.class)
public interface RCRoutineService extends IModelObject, IHasServiceRelatedProducts {
  public abstract String getGroupName();
  
  public abstract RCRoutineService setGroupName(final String groupName);
  
  public abstract RCServiceContractDelegate getProjectInfo();
  
  public abstract RCRoutineService setProjectInfo(final RCServiceContractDelegate projectInfo);
  
  public abstract Collection<RCLogicProduct> getProducts();
  
  public abstract RCRoutineService addtoProducts(final RCLogicProduct rCLogicProduct);
  
  public abstract RCRoutineService setProducts(final Iterable<RCLogicProduct> products);
  
  public abstract RCRoutineService removeFromProducts(final RCLogicProduct rCLogicProduct);
  
  public abstract RCRoutineService removeAllProducts();
  
  public abstract String getInstallLocation();
  
  public abstract RCRoutineService setInstallLocation(final String installLocation);
  
  public abstract Date getRoutineStartDate();
  
  public abstract RCRoutineService setRoutineStartDate(final Date routineStartDate);
  
  public abstract Date getRoutineEndDate();
  
  public abstract RCRoutineService setRoutineEndDate(final Date routineEndDate);
  
  public abstract Integer getServiceInterval();
  
  public abstract RCRoutineService setServiceInterval(final Integer serviceInterval);
  
  public abstract Integer getPlanCount();
  
  public abstract RCRoutineService setPlanCount(final Integer planCount);
  
  public abstract Integer getFinishedCount();
  
  public abstract RCRoutineService setFinishedCount(final Integer finishedCount);
  
  public abstract Boolean getIsFinished();
  
  public abstract RCRoutineService setIsFinished(final Boolean isFinished);
  
  public abstract Integer getServiceDuration();
  
  public abstract Iterable<RCLogicProduct> getRelatedProducts();
  
  public abstract Collection<RCRoutineServiceItem> getRemenders();
  
  public abstract RCRoutineServiceItem createAndAddtoRemenders();
  
  public abstract RCRoutineServiceItem createAndAddtoRemenders(final Procedure1<RCRoutineServiceItem> updater);
  
  public abstract RCRoutineService removeFromRemenders(final RCRoutineServiceItem rCRoutineServiceItem);
  
  public abstract RCRoutineService removeAllRemenders();
  
  public abstract RCRoutineService update(final Procedure1<? super RCRoutineService> preInit);
  
  public abstract void generateRemenders();
  
  public abstract void finishedOnce();
  
  public abstract RCRoutineServiceProxy toProxy();
}
